"""
    object类：
        所有类直接或间接的父类
        所有类都拥有 object类的属性和方法

    object类中的特殊方法：
        __new__()   由系统调用，用于创建对象。
        __init__()  创建对象时手动调用，用于初始化对象值属性。
        __str__()   对象的描述，返回值是str类型，默认输出对象的内存地址。

"""


class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show(self):
        print(f'大家好，我叫：{self.name}，今年：{self.age}岁。')

    # 重写__str__()方法
    def __str__(self):
        return f'姓名：{self.name}，年龄：{self.age}'


# 创建Person类的对象
per = Person('张三', 20)  # 创建对象的时候，会自动掉调用__init__()方法
print(dir(per))
print(per)  # 输出per的时候，实际是调用了__str__()方法。
# 如果Person没有重写__str__()方法，默认输出的是一个内存地址。类似：<__main__.Person object at 0x0000025FE8FEBFD0>

# 不管是输出per还是手动调用__str__()方法，效果一样
print(per.__str__())    # 姓名：张三，年龄：20

